var SearchProviderProxyInfo = Gio.DBusInterfaceInfo.new_for_xml(SearchProviderIface);
var SearchProvider2ProxyInfo = Gio.DBusInterfaceInfo.new_for_xml(SearchProvider2Iface);
-function loadRemoteSearchProviders(addProviderCallback) {
+function loadRemoteSearchProviders(callback) {
let objectPaths = {};
let loadedProviders = [];
}
}
+ let searchSettings = new Gio.Settings({ schema: Search.SEARCH_PROVIDERS_SCHEMA });
+ if (searchSettings.get_boolean('disable-external')) {
+ callback([]);
+ return;
+ }
+
let dataDirs = GLib.get_system_data_dirs();
dataDirs.forEach(function(dataDir) {
let path = GLib.build_filenamev([dataDir, 'gnome-shell', 'search-providers']);
}
});
- let searchSettings = new Gio.Settings({ schema: Search.SEARCH_PROVIDERS_SCHEMA });
let sortOrder = searchSettings.get_strv('sort-order');
// Special case gnome-control-center to be always active and always first
sortOrder.unshift('gnome-control-center.desktop');
+ loadedProviders = loadedProviders.filter(function(provider) {
+ let appId = provider.appInfo.get_id();
+ let disabled = searchSettings.get_strv('disabled');
+ return disabled.indexOf(appId) == -1;
+ });
+
loadedProviders.sort(function(providerA, providerB) {
let idxA, idxB;
let appIdA, appIdB;
return (idxA - idxB);
});
- loadedProviders.forEach(addProviderCallback);
+ callback(loadedProviders);
}
const RemoteSearchProvider = new Lang.Class({
this._reloadRemoteProviders();
},
- _shouldUseSearchProvider: function(provider) {
- // the disable-external GSetting only affects remote providers
- if (!provider.isRemoteProvider)
- return true;
-
- if (this._searchSettings.get_boolean('disable-external'))
- return false;
-
- let appId = provider.appInfo.get_id();
- let disable = this._searchSettings.get_strv('disabled');
- return disable.indexOf(appId) == -1;
- },
-
addProvider: function(provider) {
this._providers.push(provider);
this.emit('providers-changed');
this._unregisterProvider(provider);
}));
- RemoteSearch.loadRemoteSearchProviders(Lang.bind(this, function(provider) {
- if (!this._shouldUseSearchProvider(provider))
- return;
-
- this._registerProvider(provider);
+ RemoteSearch.loadRemoteSearchProviders(Lang.bind(this, function(providers) {
+ providers.forEach(Lang.bind(this, this._registerProvider));
}));
+
this.emit('providers-changed');
},